library(baseballr)
library(kableExtra)
library(ggplot2)
library(tidyverse)
PitcherData=scrape_statcast_savant_pitcher_all("2019-04-01", "2019-05-27")
## 2019-04-01 is not a date. Attempting to coerce...
## No playerid specified. Collecting data for all batters/pitchers.
## https://baseballsavant.mlb.com/statcast_search/csv?all=true&hfPT=&hfAB=&hfBBT=&hfPR=&hfZ=&stadium=&hfBBL=&hfNewZones=&hfGT=R%7CPO%7CS%7C&hfC&hfSea=2019%7C&hfSit=&hfOuts=&opponent=&pitcher_throws=&batter_stands=&hfSA=&player_type=pitcher&hfInfield=&team=&position=&hfOutfield=&hfRO=&home_road=&game_date_gt=2019-04-01&game_date_lt=2019-05-27&hfFlag=&hfPull=&metric_1=&hfInn=&min_pitches=0&min_results=0&group_by=name&sort_col=pitches&player_event_sort=h_launch_speed&sort_order=desc&min_abs=0&type=details
## These data are from BaseballSavant and are property of MLB Advanced Media, L.P. All rights reserved.
## Grabbing data, this may take a minute...
## URL read and payload acquired successfully.
Williams=scrape_statcast_savant_pitcher_all("2019-04-01","2019-09-30", playerid=592866)
## 2019-04-01 is not a date. Attempting to coerce...
## https://baseballsavant.mlb.com/statcast_search/csv?all=true&hfPT=&hfAB=&hfBBT=&hfPR=&hfZ=&stadium=&hfBBL=&hfNewZones=&hfGT=R%7CPO%7CS%7C&hfC&hfSea=2019%7C&hfSit=&hfOuts=&opponent=&pitcher_throws=&batter_stands=&hfSA=&player_type=pitcher&hfInfield=&team=&position=&hfOutfield=&hfRO=&home_road=&pitchers_lookup%5B%5D=592866&game_date_gt=2019-04-01&game_date_lt=2019-09-30&hfFlag=&hfPull=&metric_1=&hfInn=&min_pitches=0&min_results=0&group_by=name&sort_col=pitches&player_event_sort=h_launch_speed&sort_order=desc&min_abs=0&type=details
## These data are from BaseballSavant and are property of MLB Advanced Media, L.P. All rights reserved.
## Grabbing data, this may take a minute...
## URL read and payload acquired successfully.
Musgrove=scrape_statcast_savant_pitcher_all("2019-04-01","2019-09-30", playerid=605397)
## 2019-04-01 is not a date. Attempting to coerce...
## https://baseballsavant.mlb.com/statcast_search/csv?all=true&hfPT=&hfAB=&hfBBT=&hfPR=&hfZ=&stadium=&hfBBL=&hfNewZones=&hfGT=R%7CPO%7CS%7C&hfC&hfSea=2019%7C&hfSit=&hfOuts=&opponent=&pitcher_throws=&batter_stands=&hfSA=&player_type=pitcher&hfInfield=&team=&position=&hfOutfield=&hfRO=&home_road=&pitchers_lookup%5B%5D=605397&game_date_gt=2019-04-01&game_date_lt=2019-09-30&hfFlag=&hfPull=&metric_1=&hfInn=&min_pitches=0&min_results=0&group_by=name&sort_col=pitches&player_event_sort=h_launch_speed&sort_order=desc&min_abs=0&type=details
## These data are from BaseballSavant and are property of MLB Advanced Media, L.P. All rights reserved.
## Grabbing data, this may take a minute...
## URL read and payload acquired successfully.
Archer=scrape_statcast_savant_pitcher_all("2019-04-01","2019-09-30", playerid=502042)
## 2019-04-01 is not a date. Attempting to coerce...
## https://baseballsavant.mlb.com/statcast_search/csv?all=true&hfPT=&hfAB=&hfBBT=&hfPR=&hfZ=&stadium=&hfBBL=&hfNewZones=&hfGT=R%7CPO%7CS%7C&hfC&hfSea=2019%7C&hfSit=&hfOuts=&opponent=&pitcher_throws=&batter_stands=&hfSA=&player_type=pitcher&hfInfield=&team=&position=&hfOutfield=&hfRO=&home_road=&pitchers_lookup%5B%5D=502042&game_date_gt=2019-04-01&game_date_lt=2019-09-30&hfFlag=&hfPull=&metric_1=&hfInn=&min_pitches=0&min_results=0&group_by=name&sort_col=pitches&player_event_sort=h_launch_speed&sort_order=desc&min_abs=0&type=details
## These data are from BaseballSavant and are property of MLB Advanced Media, L.P. All rights reserved.
## Grabbing data, this may take a minute...
## URL read and payload acquired successfully.
Brault=scrape_statcast_savant_pitcher_all("2019-04-01","2019-09-30", playerid=643230)
## 2019-04-01 is not a date. Attempting to coerce...
## https://baseballsavant.mlb.com/statcast_search/csv?all=true&hfPT=&hfAB=&hfBBT=&hfPR=&hfZ=&stadium=&hfBBL=&hfNewZones=&hfGT=R%7CPO%7CS%7C&hfC&hfSea=2019%7C&hfSit=&hfOuts=&opponent=&pitcher_throws=&batter_stands=&hfSA=&player_type=pitcher&hfInfield=&team=&position=&hfOutfield=&hfRO=&home_road=&pitchers_lookup%5B%5D=643230&game_date_gt=2019-04-01&game_date_lt=2019-09-30&hfFlag=&hfPull=&metric_1=&hfInn=&min_pitches=0&min_results=0&group_by=name&sort_col=pitches&player_event_sort=h_launch_speed&sort_order=desc&min_abs=0&type=details
## These data are from BaseballSavant and are property of MLB Advanced Media, L.P. All rights reserved.
## Grabbing data, this may take a minute...
## URL read and payload acquired successfully.
Keller=scrape_statcast_savant_pitcher_all("2019-04-01","2019-09-30", playerid=656605)
## 2019-04-01 is not a date. Attempting to coerce...
## https://baseballsavant.mlb.com/statcast_search/csv?all=true&hfPT=&hfAB=&hfBBT=&hfPR=&hfZ=&stadium=&hfBBL=&hfNewZones=&hfGT=R%7CPO%7CS%7C&hfC&hfSea=2019%7C&hfSit=&hfOuts=&opponent=&pitcher_throws=&batter_stands=&hfSA=&player_type=pitcher&hfInfield=&team=&position=&hfOutfield=&hfRO=&home_road=&pitchers_lookup%5B%5D=656605&game_date_gt=2019-04-01&game_date_lt=2019-09-30&hfFlag=&hfPull=&metric_1=&hfInn=&min_pitches=0&min_results=0&group_by=name&sort_col=pitches&player_event_sort=h_launch_speed&sort_order=desc&min_abs=0&type=details
## These data are from BaseballSavant and are property of MLB Advanced Media, L.P. All rights reserved.
## Grabbing data, this may take a minute...
## URL read and payload acquired successfully.
Williams2019=Williams[,c(1,3,57,79)]
Musgrove2019=Musgrove[,c(1,3,57,79)]
Archer2019=Archer[,c(1,3,57,79)]
Brault2019=Brault[,c(1,3,57,79)]
Keller2019=Keller[,c(1,3,57,79)]
head(Williams2019)
Williams2019=na.omit(Williams2019)
unique(Williams2019$pitch_type)
## [1] "SI" "FF" "SL" "CH" "CU"
unique(Williams2019$pitch_name)
## [1] "Sinker"          "4-Seam Fastball" "Slider"          "Changeup"       
## [5] "Curveball"
Williams2019SI=Williams2019 %>%filter(pitch_type=="SI")
WilliamsmeanSISpin=round(mean(Williams2019SI$release_spin_rate),2)
WilliamsmeanSIRel=round(mean(Williams2019SI$release_speed),2)
WilliamsmeanSISpin
## [1] 1939.53
WilliamsmeanSIRel
## [1] 89.64
Williams2019FF=Williams2019 %>%filter(pitch_type=="FF")
WilliamsmeanFFSpin=round(mean(Williams2019FF$release_spin_rate),2)
WilliamsmeanFFRel=round(mean(Williams2019FF$release_speed),2)
WilliamsmeanFFSpin
## [1] 2205.29
WilliamsmeanFFRel
## [1] 91.75
Williams2019SL=Williams2019 %>%filter(pitch_type=="SL")
WilliamsmeanSLSpin=round(mean(Williams2019SL$release_spin_rate),2)
WilliamsmeanSLRel=round(mean(Williams2019SL$release_speed),2)
WilliamsmeanSLSpin
## [1] 2202.3
WilliamsmeanSLRel
## [1] 83.02
Williams2019CU=Williams2019 %>%filter(pitch_type=="CU")
WilliamsmeanCUSpin=round(mean(Williams2019CU$release_spin_rate),2)
WilliamsmeanCURel=round(mean(Williams2019CU$release_speed),2)
WilliamsmeanCUSpin
## [1] 2270.18
WilliamsmeanCURel
## [1] 76.75
Williams2019CH=Williams2019 %>%filter(pitch_type=="CH")
WilliamsmeanCHSpin=round(mean(Williams2019CH$release_spin_rate),2)
WilliamsmeanCHRel=round(mean(Williams2019CH$release_speed),2)
WilliamsmeanCHSpin
## [1] 1819.29
WilliamsmeanCHRel
## [1] 83.66
pitchesWilliams=c(unique(Williams2019$pitch_type))
pitchesWilliams
## [1] "SI" "FF" "SL" "CH" "CU"
spinsWilliams=c(WilliamsmeanSISpin, WilliamsmeanFFSpin,WilliamsmeanSLSpin,WilliamsmeanCUSpin,WilliamsmeanCHSpin)
spinsWilliams
## [1] 1939.53 2205.29 2202.30 2270.18 1819.29
ReleaseSpeedWilliams=c(WilliamsmeanSIRel, WilliamsmeanFFRel, WilliamsmeanSLRel, WilliamsmeanCURel,WilliamsmeanCHRel)
ReleaseSpeedWilliams
## [1] 89.64 91.75 83.02 76.75 83.66
table1Williams<-data.frame(pitchesWilliams,spinsWilliams,ReleaseSpeedWilliams)
table1Williams
ggplot(data = table1Williams, aes(x=pitchesWilliams, y=spinsWilliams, fill = ReleaseSpeedWilliams)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = pitchesWilliams, y = spinsWilliams, label = spinsWilliams), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Pitch Type") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Trevor Williams Avg. Spin Rate and Release Speed by Pitch Type (2019)") + 
  coord_cartesian(ylim = c(0, 3200))

  ggsave("TrevorWilliams.png")
## Saving 7 x 5 in image
head(Musgrove2019)
Musgrove2019=na.omit(Musgrove2019)
unique(Musgrove2019$pitch_type)
## [1] "CU" "FF" "SI" "SL" "CH" "FC"
unique(Musgrove2019$pitch_name)
## [1] "Curveball"       "4-Seam Fastball" "Sinker"          "Slider"         
## [5] "Changeup"        "Cutter"
Musgrove2019CU=Musgrove2019 %>%filter(pitch_type=="CU")
MusgrovemeanCUSpin=round(mean(Musgrove2019CU$release_spin_rate),2)
MusgrovemeanCURel=round(mean(Musgrove2019CU$release_speed),2)
MusgrovemeanCUSpin
## [1] 2573.59
MusgrovemeanCURel
## [1] 82.04
Musgrove2019FF=Musgrove2019 %>%filter(pitch_type=="FF")
MusgrovemeanFFSpin=round(mean(Musgrove2019FF$release_spin_rate),2)
MusgrovemeanFFRel=round(mean(Musgrove2019FF$release_speed),2)
MusgrovemeanFFSpin
## [1] 2418.3
MusgrovemeanFFRel
## [1] 92.74
Musgrove2019SI=Musgrove2019 %>%filter(pitch_type=="SI")
MusgrovemeanSISpin=round(mean(Musgrove2019SI$release_spin_rate),2)
MusgrovemeanSIRel=round(mean(Musgrove2019SI$release_speed),2)
MusgrovemeanSISpin
## [1] 2276.55
MusgrovemeanSIRel
## [1] 91.48
Musgrove2019SL=Musgrove2019 %>%filter(pitch_type=="SL")
MusgrovemeanSLSpin=round(mean(Musgrove2019SL$release_spin_rate),2)
MusgrovemeanSLRel=round(mean(Musgrove2019SL$release_speed),2)
MusgrovemeanSLSpin
## [1] 2494.72
MusgrovemeanSLRel
## [1] 83.21
Musgrove2019CH=Musgrove2019 %>%filter(pitch_type=="CH")
MusgrovemeanCHSpin=round(mean(Musgrove2019CH$release_spin_rate),2)
MusgrovemeanCHRel=round(mean(Musgrove2019CH$release_speed),2)
MusgrovemeanCHSpin
## [1] 1999.99
MusgrovemeanCHRel
## [1] 85.3
Musgrove2019FC=Musgrove2019 %>%filter(pitch_type=="FC")
MusgrovemeanFCSpin=round(mean(Musgrove2019FC$release_spin_rate),2)
MusgrovemeanFCRel=round(mean(Musgrove2019FC$release_speed),2)
MusgrovemeanFCSpin
## [1] 2513.58
MusgrovemeanFCRel
## [1] 88.76
pitchesMusgrove=c(unique(Musgrove2019$pitch_type))
pitchesMusgrove
## [1] "CU" "FF" "SI" "SL" "CH" "FC"
spinsMusgrove=c(MusgrovemeanCUSpin, MusgrovemeanFFSpin,MusgrovemeanSISpin,MusgrovemeanSLSpin,MusgrovemeanCHSpin, MusgrovemeanFCSpin)
spinsMusgrove
## [1] 2573.59 2418.30 2276.55 2494.72 1999.99 2513.58
ReleaseSpeedMusgrove=c(MusgrovemeanCURel, MusgrovemeanFFRel, MusgrovemeanSIRel, MusgrovemeanSLRel,MusgrovemeanCHRel, MusgrovemeanFCRel)
ReleaseSpeedMusgrove
## [1] 82.04 92.74 91.48 83.21 85.30 88.76
table1Musgrove<-data.frame(pitchesMusgrove,spinsMusgrove,ReleaseSpeedMusgrove)
table1Musgrove
ggplot(data = table1Musgrove, aes(x=pitchesMusgrove, y=spinsMusgrove, fill = ReleaseSpeedMusgrove)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = pitchesMusgrove, y = spinsMusgrove, label = spinsMusgrove), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Pitch Type") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Joe Musgrove Avg. Spin Rate and Release Speed by Pitch Type (2019)") + 
  coord_cartesian(ylim = c(0, 3200))

  ggsave("JoeMusgrove.png")
## Saving 7 x 5 in image
head(Archer2019)
Archer2019=na.omit(Archer2019)
unique(Archer2019$pitch_type)
## [1] "SL" "FF" "CH" "CU" "FT"
unique(Archer2019$pitch_name)
## [1] "Slider"          "4-Seam Fastball" "Changeup"        "Curveball"      
## [5] "2-Seam Fastball"
Archer2019SL=Archer2019 %>%filter(pitch_type=="SL")
ArchermeanSLSpin=round(mean(Archer2019SL$release_spin_rate),2)
ArchermeanSLRel=round(mean(Archer2019SL$release_speed),2)
ArchermeanSLSpin
## [1] 2613.44
ArchermeanSLRel
## [1] 88.76
Archer2019FF=Archer2019 %>%filter(pitch_type=="FF")
ArchermeanFFSpin=round(mean(Archer2019FF$release_spin_rate),2)
ArchermeanFFRel=round(mean(Archer2019FF$release_speed),2)
ArchermeanFFSpin
## [1] 2264.25
ArchermeanFFRel
## [1] 94.09
Archer2019CH=Archer2019 %>%filter(pitch_type=="CH")
ArchermeanCHSpin=round(mean(Archer2019CH$release_spin_rate),2)
ArchermeanCHRel=round(mean(Archer2019CH$release_speed),2)
ArchermeanCHSpin
## [1] 1641.94
ArchermeanCHRel
## [1] 87.67
Archer2019CU=Archer2019 %>%filter(pitch_type=="CU")
ArchermeanCUSpin=round(mean(Archer2019CU$release_spin_rate),2)
ArchermeanCURel=round(mean(Archer2019CU$release_speed),2)
ArchermeanCUSpin
## [1] 2676.07
ArchermeanCURel
## [1] 82.41
Archer2019FT=Archer2019 %>%filter(pitch_type=="FT")
ArchermeanFTSpin=round(mean(Archer2019FT$release_spin_rate),2)
ArchermeanFTRel=round(mean(Archer2019FT$release_speed),2)
ArchermeanFTSpin
## [1] 2237.17
ArchermeanFTRel
## [1] 93.85
pitchesArcher=c(unique(Archer2019$pitch_type))
pitchesArcher
## [1] "SL" "FF" "CH" "CU" "FT"
spinsArcher=c(ArchermeanSLSpin, ArchermeanFFSpin,ArchermeanCHSpin,ArchermeanCUSpin,ArchermeanFTSpin)
spinsArcher
## [1] 2613.44 2264.25 1641.94 2676.07 2237.17
ReleaseSpeedArcher=c(ArchermeanSLRel, ArchermeanFFRel, ArchermeanCHRel, ArchermeanCURel,ArchermeanFTRel)
ReleaseSpeedArcher
## [1] 88.76 94.09 87.67 82.41 93.85
table1Archer<-data.frame(pitchesArcher,spinsArcher,ReleaseSpeedArcher)
table1Archer
ggplot(data = table1Archer, aes(x=pitchesArcher, y=spinsArcher, fill = ReleaseSpeedArcher)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = pitchesArcher, y = spinsArcher, label = spinsArcher), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Pitch Type") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Chris Archer Avg. Spin Rate and Release Speed by Pitch Type (2019)") + 
  coord_cartesian(ylim = c(0, 3200))

  ggsave("ChrisArcher.png")
## Saving 7 x 5 in image
head(Brault2019)
Brault2019=na.omit(Brault2019)
unique(Brault2019$pitch_type)
## [1] "SL" "FF" "FC" "CH" "FT" "CU"
unique(Brault2019$pitch_name)
## [1] "Slider"          "4-Seam Fastball" "Cutter"          "Changeup"       
## [5] "2-Seam Fastball" "Curveball"
Brault2019SL=Brault2019 %>%filter(pitch_type=="SL")
BraultmeanSLSpin=round(mean(Brault2019SL$release_spin_rate),2)
BraultmeanSLRel=round(mean(Brault2019SL$release_speed),2)
BraultmeanSLSpin
## [1] 2192.17
BraultmeanSLRel
## [1] 81.22
Brault2019FF=Brault2019 %>%filter(pitch_type=="FF")
BraultmeanFFSpin=round(mean(Brault2019FF$release_spin_rate),2)
BraultmeanFFRel=round(mean(Brault2019FF$release_speed),2)
BraultmeanFFSpin
## [1] 2068.36
BraultmeanFFRel
## [1] 92.09
Brault2019FC=Brault2019 %>%filter(pitch_type=="FC")
BraultmeanFCSpin=round(mean(Brault2019FC$release_spin_rate),2)
BraultmeanFCRel=round(mean(Brault2019FC$release_speed),2)
BraultmeanFCSpin
## [1] 2211.08
BraultmeanFCRel
## [1] 83.49
Brault2019CH=Brault2019 %>%filter(pitch_type=="CH")
BraultmeanCHSpin=round(mean(Brault2019CH$release_spin_rate),2)
BraultmeanCHRel=round(mean(Brault2019CH$release_speed),2)
BraultmeanCHSpin
## [1] 1582.26
BraultmeanCHRel
## [1] 84.26
Brault2019FT=Brault2019 %>%filter(pitch_type=="FT")
BraultmeanFTSpin=round(mean(Brault2019FT$release_spin_rate),2)
BraultmeanFTRel=round(mean(Brault2019FT$release_speed),2)
BraultmeanFTSpin
## [1] 1888.13
BraultmeanFTRel
## [1] 91.34
Brault2019CU=Brault2019 %>%filter(pitch_type=="CU")
BraultmeanCUSpin=round(mean(Brault2019CU$release_spin_rate),2)
BraultmeanCURel=round(mean(Brault2019CU$release_speed),2)
BraultmeanCUSpin
## [1] 2031.48
BraultmeanCURel
## [1] 71.06
pitchesBrault=c(unique(Brault2019$pitch_type))
pitchesBrault
## [1] "SL" "FF" "FC" "CH" "FT" "CU"
spinsBrault=c(BraultmeanSLSpin, BraultmeanFFSpin,BraultmeanFCSpin,BraultmeanCHSpin,BraultmeanFTSpin,BraultmeanCUSpin)
spinsBrault
## [1] 2192.17 2068.36 2211.08 1582.26 1888.13 2031.48
ReleaseSpeedBrault=c(BraultmeanSLRel, BraultmeanFFRel, BraultmeanFCRel, BraultmeanCHRel,BraultmeanFTRel,BraultmeanCURel)
ReleaseSpeedBrault
## [1] 81.22 92.09 83.49 84.26 91.34 71.06
table1Brault<-data.frame(pitchesBrault,spinsBrault,ReleaseSpeedBrault)
table1Brault
ggplot(data = table1Brault, aes(x=pitchesBrault, y=spinsBrault, fill = ReleaseSpeedBrault)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = pitchesBrault, y = spinsBrault, label = spinsBrault), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Pitch Type") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Steven Brault Avg. Spin Rate and Release Speed by Pitch Type (2019)") + 
  coord_cartesian(ylim = c(0, 3200))

  ggsave("StevenBrault.png")
## Saving 7 x 5 in image
head(Keller2019)
Keller2019=na.omit(Keller2019)
unique(Keller2019$pitch_type)
## [1] "FF" "SL" "CU" "CH"
unique(Keller2019$pitch_name)
## [1] "4-Seam Fastball" "Slider"          "Curveball"       "Changeup"
Keller2019FF=Keller2019 %>%filter(pitch_type=="FF")
KellermeanFFSpin=round(mean(Keller2019FF$release_spin_rate),2)
KellermeanFFRel=round(mean(Keller2019FF$release_speed),2)
KellermeanFFSpin
## [1] 2472.93
KellermeanFFRel
## [1] 95.36
Keller2019SL=Keller2019 %>%filter(pitch_type=="SL")
KellermeanSLSpin=round(mean(Keller2019SL$release_spin_rate),2)
KellermeanSLRel=round(mean(Keller2019SL$release_speed),2)
KellermeanSLSpin
## [1] 2661.34
KellermeanSLRel
## [1] 87.66
Keller2019CU=Keller2019 %>%filter(pitch_type=="CU")
KellermeanCUSpin=round(mean(Keller2019CU$release_spin_rate),2)
KellermeanCURel=round(mean(Keller2019CU$release_speed),2)
KellermeanCUSpin
## [1] 2769.73
KellermeanCURel
## [1] 81.11
Keller2019CH=Keller2019 %>%filter(pitch_type=="CH")
KellermeanCHSpin=round(mean(Keller2019CH$release_spin_rate),2)
KellermeanCHRel=round(mean(Keller2019CH$release_speed),2)
KellermeanCHSpin
## [1] 1704.61
KellermeanCHRel
## [1] 91.02
pitchesKeller=c(unique(Keller2019$pitch_type))
pitchesKeller
## [1] "FF" "SL" "CU" "CH"
spinsKeller=c(KellermeanFFSpin, KellermeanSLSpin,KellermeanCUSpin,KellermeanCHSpin)
spinsKeller
## [1] 2472.93 2661.34 2769.73 1704.61
ReleaseSpeedKeller=c(KellermeanFFRel, KellermeanSLRel, KellermeanCURel, KellermeanCHRel)
ReleaseSpeedKeller
## [1] 95.36 87.66 81.11 91.02
table1Keller<-data.frame(pitchesKeller,spinsKeller,ReleaseSpeedKeller)
table1Keller
ggplot(data = table1Keller, aes(x=pitchesKeller, y=spinsKeller, fill = ReleaseSpeedKeller)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = pitchesKeller, y = spinsKeller, label = spinsKeller), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Pitch Type") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Mitch Keller Avg. Spin Rate and Release Speed by Pitch Type (2019)") + 
  coord_cartesian(ylim = c(0, 3200))

  ggsave("MitchKeller.png")
## Saving 7 x 5 in image
PiratesPitchers=rbind(Williams, Musgrove, Archer, Brault, Keller)
PiratesPitchers
PiratesPitcherNames=c(unique(PiratesPitchers$player_name))
PiratesPitcherNames
## [1] "Trevor Williams" "Joe Musgrove"    "Chris Archer"    "Steven Brault"  
## [5] "Mitch Keller"
Sliderspins=c(WilliamsmeanSLSpin, MusgrovemeanSLSpin,ArchermeanSLSpin,BraultmeanSLSpin, KellermeanSLSpin)
Sliderspins
## [1] 2202.30 2494.72 2613.44 2192.17 2661.34
SliderReleaseSpeed=c(WilliamsmeanSLRel, MusgrovemeanSLRel, ArchermeanSLRel, BraultmeanSLRel, KellermeanSLRel)
SliderReleaseSpeed
## [1] 83.02 83.21 88.76 81.22 87.66
table1Sliders<-data.frame(PiratesPitcherNames,Sliderspins,SliderReleaseSpeed)
table1Sliders
ggplot(data = table1Sliders, aes(x=PiratesPitcherNames, y=Sliderspins, fill = SliderReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = PiratesPitcherNames, y = Sliderspins, label = Sliderspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Player Name") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pirates Pitchers Avg. Spin Rate and Release Speed for Sliders (2019)") + 
  coord_cartesian(ylim = c(0, 3200)) +
  geom_abline(slope=0, intercept=2400,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=2500,  col = "red",lty=2)

  ggsave("PiratesSliders.png")
## Saving 7 x 5 in image
FourseamFastballspins=c(WilliamsmeanFFSpin, MusgrovemeanFFSpin,ArchermeanFFSpin,BraultmeanFFSpin, KellermeanFFSpin)
FourseamFastballspins
## [1] 2205.29 2418.30 2264.25 2068.36 2472.93
FourseamFastballReleaseSpeed=c(WilliamsmeanFFRel, MusgrovemeanFFRel, ArchermeanFFRel, BraultmeanFFRel, KellermeanFFRel)
FourseamFastballReleaseSpeed
## [1] 91.75 92.74 94.09 92.09 95.36
table1FourseamFastball<-data.frame(PiratesPitcherNames,FourseamFastballspins,FourseamFastballReleaseSpeed)
table1FourseamFastball
ggplot(data = table1FourseamFastball, aes(x=PiratesPitcherNames, y=FourseamFastballspins, fill = FourseamFastballReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = PiratesPitcherNames, y = FourseamFastballspins, label = FourseamFastballspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Player Name") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pirates Pitchers Avg. Spin Rate and Release Speed for 4-Seam Fastballs (2019)") + 
  coord_cartesian(ylim = c(0, 3200)) +
  geom_abline(slope=0, intercept=2250,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=2350,  col = "red",lty=2)

  ggsave("Pirates4seam.png")
## Saving 7 x 5 in image
CutterPitchers=rbind(Musgrove,Brault)
PiratesCutterPitchers=c(unique(CutterPitchers$player_name))

Cutterspins=c(MusgrovemeanFCSpin,BraultmeanFCSpin)
Cutterspins
## [1] 2513.58 2211.08
CutterReleaseSpeed=c(MusgrovemeanFCRel, BraultmeanFCRel)
CutterReleaseSpeed
## [1] 88.76 83.49
table1Cutter<-data.frame(PiratesCutterPitchers,Cutterspins,CutterReleaseSpeed)
table1Cutter
ggplot(data = table1Cutter, aes(x=PiratesCutterPitchers, y=Cutterspins, fill = CutterReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = PiratesCutterPitchers, y = Cutterspins, label = Cutterspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Player Name") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pirates Pitchers Avg. Spin Rate and Release Speed for Cutters (2019)") + 
  coord_cartesian(ylim = c(0, 3200))+
  geom_abline(slope=0, intercept=2350,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=2450,  col = "red",lty=2)

  ggsave("PiratesCutters.png")
## Saving 7 x 5 in image
Changeupspins=c(WilliamsmeanCHSpin, MusgrovemeanCHSpin,ArchermeanCHSpin,BraultmeanCHSpin, KellermeanCHSpin)
Changeupspins
## [1] 1819.29 1999.99 1641.94 1582.26 1704.61
ChangeupReleaseSpeed=c(WilliamsmeanCHRel, MusgrovemeanCHRel, ArchermeanCHRel, BraultmeanCHRel, KellermeanCHRel)
ChangeupReleaseSpeed
## [1] 83.66 85.30 87.67 84.26 91.02
table1Changeup<-data.frame(PiratesPitcherNames,Changeupspins,ChangeupReleaseSpeed)
table1Changeup
ggplot(data = table1Changeup, aes(x=PiratesPitcherNames, y=Changeupspins, fill = ChangeupReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = PiratesPitcherNames, y = Changeupspins, label = Changeupspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Player Name") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pirates Pitchers Avg. Spin Rate and Release Speed for Changeups (2019)") + 
  coord_cartesian(ylim = c(0, 3200))+
  geom_abline(slope=0, intercept=1700,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=1800,  col = "red",lty=2)

  ggsave("PiratesChangeups.png")
## Saving 7 x 5 in image
Curveballspins=c(WilliamsmeanCUSpin, MusgrovemeanCUSpin,ArchermeanCUSpin,BraultmeanCUSpin, KellermeanCUSpin)
Curveballspins
## [1] 2270.18 2573.59 2676.07 2031.48 2769.73
CurveballReleaseSpeed=c(WilliamsmeanCURel, MusgrovemeanCURel, ArchermeanCURel, BraultmeanCURel, KellermeanCURel)
CurveballReleaseSpeed
## [1] 76.75 82.04 82.41 71.06 81.11
table1Curveball<-data.frame(PiratesPitcherNames,Curveballspins,CurveballReleaseSpeed)
table1Curveball
ggplot(data = table1Curveball, aes(x=PiratesPitcherNames, y=Curveballspins, fill = CurveballReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = PiratesPitcherNames, y = Curveballspins, label = Curveballspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Player Name") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pirates Pitchers Avg. Spin Rate and Release Speed for Curveballs (2019)") + 
  coord_cartesian(ylim = c(0, 3200))+
  geom_abline(slope=0, intercept=2500,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=2600,  col = "red",lty=2)

  ggsave("PiratesCurveballs.png")
## Saving 7 x 5 in image
TwoSeamPitchers=rbind(Archer,Brault)
PiratesTwoSeamPitchers=c(unique(TwoSeamPitchers$player_name))


TwoseamFastballspins=c(ArchermeanFTSpin,BraultmeanFTSpin)
TwoseamFastballspins
## [1] 2237.17 1888.13
TwoseamFastballReleaseSpeed=c(ArchermeanFTRel, BraultmeanFTRel)
TwoseamFastballReleaseSpeed
## [1] 93.85 91.34
table1TwoseamFastball<-data.frame(PiratesTwoSeamPitchers,TwoseamFastballspins,TwoseamFastballReleaseSpeed)
table1TwoseamFastball
ggplot(data = table1TwoseamFastball, aes(x=PiratesTwoSeamPitchers, y=TwoseamFastballspins, fill = TwoseamFastballReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = PiratesTwoSeamPitchers, y = TwoseamFastballspins, label = TwoseamFastballspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Player Name") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pirates Pitchers Avg. Spin Rate and Release Speed for 2-Seam Fastballs (2019)") + 
  coord_cartesian(ylim = c(0, 3200))+
  geom_abline(slope=0, intercept=2150,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=2200,  col = "red",lty=2)

  ggsave("Pirates2seam.png")
## Saving 7 x 5 in image
SinkerPitchers=rbind(Williams, Musgrove)
PiratesSinkerPitchers=c(unique(SinkerPitchers$player_name))

Sinkerspins=c(WilliamsmeanSISpin,MusgrovemeanSISpin)
Sinkerspins
## [1] 1939.53 2276.55
SinkerReleaseSpeed=c(WilliamsmeanSIRel, MusgrovemeanSIRel)
SinkerReleaseSpeed
## [1] 89.64 91.48
table1Sinker<-data.frame(PiratesSinkerPitchers,Sinkerspins,SinkerReleaseSpeed)
table1Sinker
ggplot(data = table1Sinker, aes(x=PiratesSinkerPitchers, y=Sinkerspins, fill = SinkerReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = PiratesSinkerPitchers, y = Sinkerspins, label = Sinkerspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Player Name") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pirates Pitchers Avg. Spin Rate and Release Speed for Sinkers (2019)") + 
  coord_cartesian(ylim = c(0, 3200))+
  geom_abline(slope=0, intercept=2100,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=2150,  col = "red",lty=2)

  ggsave("PiratesSinkers.png")
## Saving 7 x 5 in image
Cole=scrape_statcast_savant_pitcher_all("2019-04-01","2019-09-30", playerid=543037)
## 2019-04-01 is not a date. Attempting to coerce...
## https://baseballsavant.mlb.com/statcast_search/csv?all=true&hfPT=&hfAB=&hfBBT=&hfPR=&hfZ=&stadium=&hfBBL=&hfNewZones=&hfGT=R%7CPO%7CS%7C&hfC&hfSea=2019%7C&hfSit=&hfOuts=&opponent=&pitcher_throws=&batter_stands=&hfSA=&player_type=pitcher&hfInfield=&team=&position=&hfOutfield=&hfRO=&home_road=&pitchers_lookup%5B%5D=543037&game_date_gt=2019-04-01&game_date_lt=2019-09-30&hfFlag=&hfPull=&metric_1=&hfInn=&min_pitches=0&min_results=0&group_by=name&sort_col=pitches&player_event_sort=h_launch_speed&sort_order=desc&min_abs=0&type=details
## These data are from BaseballSavant and are property of MLB Advanced Media, L.P. All rights reserved.
## Grabbing data, this may take a minute...
## URL read and payload acquired successfully.
Strasburg=scrape_statcast_savant_pitcher_all("2019-04-01","2019-09-30", playerid=544931)
## 2019-04-01 is not a date. Attempting to coerce...
## https://baseballsavant.mlb.com/statcast_search/csv?all=true&hfPT=&hfAB=&hfBBT=&hfPR=&hfZ=&stadium=&hfBBL=&hfNewZones=&hfGT=R%7CPO%7CS%7C&hfC&hfSea=2019%7C&hfSit=&hfOuts=&opponent=&pitcher_throws=&batter_stands=&hfSA=&player_type=pitcher&hfInfield=&team=&position=&hfOutfield=&hfRO=&home_road=&pitchers_lookup%5B%5D=544931&game_date_gt=2019-04-01&game_date_lt=2019-09-30&hfFlag=&hfPull=&metric_1=&hfInn=&min_pitches=0&min_results=0&group_by=name&sort_col=pitches&player_event_sort=h_launch_speed&sort_order=desc&min_abs=0&type=details
## These data are from BaseballSavant and are property of MLB Advanced Media, L.P. All rights reserved.
## Grabbing data, this may take a minute...
## URL read and payload acquired successfully.
Wheeler=scrape_statcast_savant_pitcher_all("2019-04-01","2019-09-30", playerid=554430)
## 2019-04-01 is not a date. Attempting to coerce...
## https://baseballsavant.mlb.com/statcast_search/csv?all=true&hfPT=&hfAB=&hfBBT=&hfPR=&hfZ=&stadium=&hfBBL=&hfNewZones=&hfGT=R%7CPO%7CS%7C&hfC&hfSea=2019%7C&hfSit=&hfOuts=&opponent=&pitcher_throws=&batter_stands=&hfSA=&player_type=pitcher&hfInfield=&team=&position=&hfOutfield=&hfRO=&home_road=&pitchers_lookup%5B%5D=554430&game_date_gt=2019-04-01&game_date_lt=2019-09-30&hfFlag=&hfPull=&metric_1=&hfInn=&min_pitches=0&min_results=0&group_by=name&sort_col=pitches&player_event_sort=h_launch_speed&sort_order=desc&min_abs=0&type=details
## These data are from BaseballSavant and are property of MLB Advanced Media, L.P. All rights reserved.
## Grabbing data, this may take a minute...
## URL read and payload acquired successfully.
Bumgarner=scrape_statcast_savant_pitcher_all("2019-04-01","2019-09-30", playerid=518516)
## 2019-04-01 is not a date. Attempting to coerce...
## https://baseballsavant.mlb.com/statcast_search/csv?all=true&hfPT=&hfAB=&hfBBT=&hfPR=&hfZ=&stadium=&hfBBL=&hfNewZones=&hfGT=R%7CPO%7CS%7C&hfC&hfSea=2019%7C&hfSit=&hfOuts=&opponent=&pitcher_throws=&batter_stands=&hfSA=&player_type=pitcher&hfInfield=&team=&position=&hfOutfield=&hfRO=&home_road=&pitchers_lookup%5B%5D=518516&game_date_gt=2019-04-01&game_date_lt=2019-09-30&hfFlag=&hfPull=&metric_1=&hfInn=&min_pitches=0&min_results=0&group_by=name&sort_col=pitches&player_event_sort=h_launch_speed&sort_order=desc&min_abs=0&type=details
## These data are from BaseballSavant and are property of MLB Advanced Media, L.P. All rights reserved.
## Grabbing data, this may take a minute...
## URL read and payload acquired successfully.
Ryu=scrape_statcast_savant_pitcher_all("2019-04-01","2019-09-30", playerid=547943)
## 2019-04-01 is not a date. Attempting to coerce...
## https://baseballsavant.mlb.com/statcast_search/csv?all=true&hfPT=&hfAB=&hfBBT=&hfPR=&hfZ=&stadium=&hfBBL=&hfNewZones=&hfGT=R%7CPO%7CS%7C&hfC&hfSea=2019%7C&hfSit=&hfOuts=&opponent=&pitcher_throws=&batter_stands=&hfSA=&player_type=pitcher&hfInfield=&team=&position=&hfOutfield=&hfRO=&home_road=&pitchers_lookup%5B%5D=547943&game_date_gt=2019-04-01&game_date_lt=2019-09-30&hfFlag=&hfPull=&metric_1=&hfInn=&min_pitches=0&min_results=0&group_by=name&sort_col=pitches&player_event_sort=h_launch_speed&sort_order=desc&min_abs=0&type=details
## These data are from BaseballSavant and are property of MLB Advanced Media, L.P. All rights reserved.
## Grabbing data, this may take a minute...
## URL read and payload acquired successfully.
Cole2019=Cole[,c(1,3,57,79)]
Strasburg2019=Strasburg[,c(1,3,57,79)]
Wheeler2019=Wheeler[,c(1,3,57,79)]
Bumgarner2019=Bumgarner[,c(1,3,57,79)]
Ryu2019=Ryu[,c(1,3,57,79)]
head(Cole2019)
Cole2019=na.omit(Cole2019)
unique(Cole2019$pitch_type)
## [1] "FF" "KC" "CH" "SL" "FT"
unique(Cole2019$pitch_name)
## [1] "4-Seam Fastball" "Knuckle Curve"   "Changeup"        "Slider"         
## [5] "2-Seam Fastball"
Cole2019FF=Cole2019 %>%filter(pitch_type=="FF")
ColemeanFFSpin=round(mean(Cole2019FF$release_spin_rate),2)
ColemeanFFRel=round(mean(Cole2019FF$release_speed),2)
ColemeanFFSpin
## [1] 2530.37
ColemeanFFRel
## [1] 97.15
Cole2019KC=Cole2019 %>%filter(pitch_type=="KC")
ColemeanKCSpin=round(mean(Cole2019KC$release_spin_rate),2)
ColemeanKCRel=round(mean(Cole2019KC$release_speed),2)
ColemeanKCSpin
## [1] 2899.46
ColemeanKCRel
## [1] 82.59
Cole2019CH=Cole2019 %>%filter(pitch_type=="CH")
ColemeanCHSpin=round(mean(Cole2019CH$release_spin_rate),2)
ColemeanCHRel=round(mean(Cole2019CH$release_speed),2)
ColemeanCHSpin
## [1] 1872.55
ColemeanCHRel
## [1] 88.65
Cole2019SL=Cole2019 %>%filter(pitch_type=="SL")
ColemeanSLSpin=round(mean(Cole2019SL$release_spin_rate),2)
ColemeanSLRel=round(mean(Cole2019SL$release_speed),2)
ColemeanSLSpin
## [1] 2621.64
ColemeanSLRel
## [1] 89.29
Cole2019FT=Cole2019 %>%filter(pitch_type=="FT")
ColemeanFTSpin=round(mean(Cole2019FT$release_spin_rate),2)
ColemeanFTRel=round(mean(Cole2019FT$release_speed),2)
ColemeanFTSpin
## [1] 2506.44
ColemeanFTRel
## [1] 97.09
pitchesCole=c(unique(Cole2019$pitch_type))
pitchesCole
## [1] "FF" "KC" "CH" "SL" "FT"
spinsCole=c(ColemeanFFSpin, ColemeanKCSpin,ColemeanCHSpin,ColemeanSLSpin, ColemeanFTSpin)
spinsCole
## [1] 2530.37 2899.46 1872.55 2621.64 2506.44
ReleaseSpeedCole=c(ColemeanFFRel, ColemeanKCRel, ColemeanCHRel, ColemeanSLRel, ColemeanFTRel)
ReleaseSpeedCole
## [1] 97.15 82.59 88.65 89.29 97.09
table1Cole<-data.frame(pitchesCole,spinsCole,ReleaseSpeedCole)
table1Cole
ggplot(data = table1Cole, aes(x=pitchesCole, y=spinsCole, fill = ReleaseSpeedCole)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = pitchesCole, y = spinsCole, label = spinsCole), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Pitch Type") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Gerrit Cole Avg. Spin Rate and Release Speed by Pitch Type (2019)") + 
  coord_cartesian(ylim = c(0, 3200))

  ggsave("GerritCole.png")
## Saving 7 x 5 in image
head(Strasburg2019)
Strasburg2019=na.omit(Strasburg2019)
unique(Strasburg2019$pitch_type)
## [1] "CH" "FT" "FF" "CU" "SL"
unique(Strasburg2019$pitch_name)
## [1] "Changeup"        "2-Seam Fastball" "4-Seam Fastball" "Curveball"      
## [5] "Slider"
Strasburg2019CH=Strasburg2019 %>%filter(pitch_type=="CH")
StrasburgmeanCHSpin=round(mean(Strasburg2019CH$release_spin_rate),2)
StrasburgmeanCHRel=round(mean(Strasburg2019CH$release_speed),2)
StrasburgmeanCHSpin
## [1] 1678.08
StrasburgmeanCHRel
## [1] 87.77
Strasburg2019FT=Strasburg2019 %>%filter(pitch_type=="FT")
StrasburgmeanFTSpin=round(mean(Strasburg2019FT$release_spin_rate),2)
StrasburgmeanFTRel=round(mean(Strasburg2019FT$release_speed),2)
StrasburgmeanFTSpin
## [1] 2132.5
StrasburgmeanFTRel
## [1] 93.75
Strasburg2019FF=Strasburg2019 %>%filter(pitch_type=="FF")
StrasburgmeanFFSpin=round(mean(Strasburg2019FF$release_spin_rate),2)
StrasburgmeanFFRel=round(mean(Strasburg2019FF$release_speed),2)
StrasburgmeanFFSpin
## [1] 2170.16
StrasburgmeanFFRel
## [1] 93.9
Strasburg2019CU=Strasburg2019 %>%filter(pitch_type=="CU")
StrasburgmeanCUSpin=round(mean(Strasburg2019CU$release_spin_rate),2)
StrasburgmeanCURel=round(mean(Strasburg2019CU$release_speed),2)
StrasburgmeanCUSpin
## [1] 2775.12
StrasburgmeanCURel
## [1] 81.23
Strasburg2019SL=Strasburg2019 %>%filter(pitch_type=="SL")
StrasburgmeanSLSpin=round(mean(Strasburg2019SL$release_spin_rate),2)
StrasburgmeanSLRel=round(mean(Strasburg2019SL$release_speed),2)
StrasburgmeanSLSpin
## [1] 2352
StrasburgmeanSLRel
## [1] 88.17
pitchesStrasburg=c(unique(Strasburg2019$pitch_type))
pitchesStrasburg
## [1] "CH" "FT" "FF" "CU" "SL"
spinsStrasburg=c(StrasburgmeanCHSpin, StrasburgmeanFTSpin,StrasburgmeanFFSpin,StrasburgmeanCUSpin, StrasburgmeanSLSpin)
spinsStrasburg
## [1] 1678.08 2132.50 2170.16 2775.12 2352.00
ReleaseSpeedStrasburg=c(StrasburgmeanCHRel, StrasburgmeanFTRel, StrasburgmeanFFRel, StrasburgmeanCURel, StrasburgmeanSLRel)
ReleaseSpeedStrasburg
## [1] 87.77 93.75 93.90 81.23 88.17
table1Strasburg<-data.frame(pitchesStrasburg,spinsStrasburg,ReleaseSpeedStrasburg)
table1Strasburg
ggplot(data = table1Strasburg, aes(x=pitchesStrasburg, y=spinsStrasburg, fill = ReleaseSpeedStrasburg)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = pitchesStrasburg, y = spinsStrasburg, label = spinsStrasburg), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Pitch Type") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Stephen Strasburg Avg. Spin Rate and Release Speed by Pitch Type (2019)") + 
  coord_cartesian(ylim = c(0, 3200))

  ggsave("StephenStrasburg.png")
## Saving 7 x 5 in image
head(Wheeler2019)
Wheeler2019=na.omit(Wheeler2019)
unique(Wheeler2019$pitch_type)
## [1] "CU" "FF" "SL" "FT" "CH" "FS"
unique(Wheeler2019$pitch_name)
## [1] "Curveball"       "4-Seam Fastball" "Slider"          "2-Seam Fastball"
## [5] "Changeup"        "Split Finger"
Wheeler2019CU=Wheeler2019 %>%filter(pitch_type=="CU")
WheelermeanCUSpin=round(mean(Wheeler2019CU$release_spin_rate),2)
WheelermeanCURel=round(mean(Wheeler2019CU$release_speed),2)
WheelermeanCUSpin
## [1] 2649.76
WheelermeanCURel
## [1] 80.71
Wheeler2019FF=Wheeler2019 %>%filter(pitch_type=="FF")
WheelermeanFFSpin=round(mean(Wheeler2019FF$release_spin_rate),2)
WheelermeanFFRel=round(mean(Wheeler2019FF$release_speed),2)
WheelermeanFFSpin
## [1] 2340.7
WheelermeanFFRel
## [1] 96.78
Wheeler2019SL=Wheeler2019 %>%filter(pitch_type=="SL")
WheelermeanSLSpin=round(mean(Wheeler2019SL$release_spin_rate),2)
WheelermeanSLRel=round(mean(Wheeler2019SL$release_speed),2)
WheelermeanSLSpin
## [1] 2386.41
WheelermeanSLRel
## [1] 91.16
Wheeler2019FT=Wheeler2019 %>%filter(pitch_type=="FT")
WheelermeanFTSpin=round(mean(Wheeler2019FT$release_spin_rate),2)
WheelermeanFTRel=round(mean(Wheeler2019FT$release_speed),2)
WheelermeanFTSpin
## [1] 2254.18
WheelermeanFTRel
## [1] 96.5
Wheeler2019CH=Wheeler2019 %>%filter(pitch_type=="CH")
WheelermeanCHSpin=round(mean(Wheeler2019CH$release_spin_rate),2)
WheelermeanCHRel=round(mean(Wheeler2019CH$release_speed),2)
WheelermeanCHSpin
## [1] 1774.38
WheelermeanCHRel
## [1] 88.91
Wheeler2019FS=Wheeler2019 %>%filter(pitch_type=="FS")
WheelermeanFSSpin=round(mean(Wheeler2019FS$release_spin_rate),2)
WheelermeanFSRel=round(mean(Wheeler2019FS$release_speed),2)
WheelermeanFSSpin
## [1] 1402.17
WheelermeanFSRel
## [1] 88.66
pitchesWheeler=c(unique(Wheeler2019$pitch_type))
pitchesWheeler
## [1] "CU" "FF" "SL" "FT" "CH" "FS"
spinsWheeler=c(WheelermeanCUSpin, WheelermeanFFSpin,WheelermeanSLSpin,WheelermeanFTSpin, WheelermeanCHSpin, WheelermeanFSSpin)
spinsWheeler
## [1] 2649.76 2340.70 2386.41 2254.18 1774.38 1402.17
ReleaseSpeedWheeler=c(WheelermeanCURel, WheelermeanFFRel, WheelermeanSLRel, WheelermeanFTRel, WheelermeanCHRel, WheelermeanFSRel)
ReleaseSpeedWheeler
## [1] 80.71 96.78 91.16 96.50 88.91 88.66
table1Wheeler<-data.frame(pitchesWheeler,spinsWheeler,ReleaseSpeedWheeler)
table1Wheeler
ggplot(data = table1Wheeler, aes(x=pitchesWheeler, y=spinsWheeler, fill = ReleaseSpeedWheeler)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = pitchesWheeler, y = spinsWheeler, label = spinsWheeler), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Pitch Type") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Zack Wheeler Avg. Spin Rate and Release Speed by Pitch Type (2019)") + 
  coord_cartesian(ylim = c(0, 3200))

  ggsave("ZachWheeler.png")
## Saving 7 x 5 in image
head(Bumgarner2019)
Bumgarner2019=na.omit(Bumgarner2019)
unique(Bumgarner2019$pitch_type)
## [1] "CU" "FF" "FC" "CH" "FT"
unique(Bumgarner2019$pitch_name)
## [1] "Curveball"       "4-Seam Fastball" "Cutter"          "Changeup"       
## [5] "2-Seam Fastball"
Bumgarner2019CU=Bumgarner2019 %>%filter(pitch_type=="CU")
BumgarnermeanCUSpin=round(mean(Bumgarner2019CU$release_spin_rate),2)
BumgarnermeanCURel=round(mean(Bumgarner2019CU$release_speed),2)
BumgarnermeanCUSpin
## [1] 2646.16
BumgarnermeanCURel
## [1] 78.81
Bumgarner2019FF=Bumgarner2019 %>%filter(pitch_type=="FF")
BumgarnermeanFFSpin=round(mean(Bumgarner2019FF$release_spin_rate),2)
BumgarnermeanFFRel=round(mean(Bumgarner2019FF$release_speed),2)
BumgarnermeanFFSpin
## [1] 2406.17
BumgarnermeanFFRel
## [1] 91.38
Bumgarner2019FC=Bumgarner2019 %>%filter(pitch_type=="FC")
BumgarnermeanFCSpin=round(mean(Bumgarner2019FC$release_spin_rate),2)
BumgarnermeanFCRel=round(mean(Bumgarner2019FC$release_speed),2)
BumgarnermeanFCSpin
## [1] 2490.13
BumgarnermeanFCRel
## [1] 87.27
Bumgarner2019CH=Bumgarner2019 %>%filter(pitch_type=="CH")
BumgarnermeanCHSpin=round(mean(Bumgarner2019CH$release_spin_rate),2)
BumgarnermeanCHRel=round(mean(Bumgarner2019CH$release_speed),2)
BumgarnermeanCHSpin
## [1] 1654.44
BumgarnermeanCHRel
## [1] 84.16
Bumgarner2019FT=Bumgarner2019 %>%filter(pitch_type=="FT")
BumgarnermeanFTSpin=round(mean(Bumgarner2019FT$release_spin_rate),2)
BumgarnermeanFTRel=round(mean(Bumgarner2019FT$release_speed),2)
BumgarnermeanFTSpin
## [1] 2399.67
BumgarnermeanFTRel
## [1] 92.17
pitchesBumgarner=c(unique(Bumgarner2019$pitch_type))
pitchesBumgarner
## [1] "CU" "FF" "FC" "CH" "FT"
spinsBumgarner=c(BumgarnermeanCUSpin, BumgarnermeanFFSpin,BumgarnermeanFCSpin,BumgarnermeanCHSpin, BumgarnermeanFTSpin)
spinsBumgarner
## [1] 2646.16 2406.17 2490.13 1654.44 2399.67
ReleaseSpeedBumgarner=c(BumgarnermeanCURel, BumgarnermeanFFRel, BumgarnermeanFCRel, BumgarnermeanCHRel, BumgarnermeanFTRel)
ReleaseSpeedBumgarner
## [1] 78.81 91.38 87.27 84.16 92.17
table1Bumgarner<-data.frame(pitchesBumgarner,spinsBumgarner,ReleaseSpeedBumgarner)
table1Bumgarner
ggplot(data = table1Bumgarner, aes(x=pitchesBumgarner, y=spinsBumgarner, fill = ReleaseSpeedBumgarner)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = pitchesBumgarner, y = spinsBumgarner, label = spinsBumgarner), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Pitch Type") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Madison Bumgarner Avg. Spin Rate and Release Speed by Pitch Type (2019)") + 
  coord_cartesian(ylim = c(0, 3200))

  ggsave("MadisonBumgarner.png")
## Saving 7 x 5 in image
head(Ryu2019)
Ryu2019=na.omit(Ryu2019)
unique(Ryu2019$pitch_type)
## [1] "CH" "FF" "FC" "FT" "CU" "SL"
unique(Ryu2019$pitch_name)
## [1] "Changeup"        "4-Seam Fastball" "Cutter"          "2-Seam Fastball"
## [5] "Curveball"       "Slider"
Ryu2019CH=Ryu2019 %>%filter(pitch_type=="CH")
RyumeanCHSpin=round(mean(Ryu2019CH$release_spin_rate),2)
RyumeanCHRel=round(mean(Ryu2019CH$release_speed),2)
RyumeanCHSpin
## [1] 1486.65
RyumeanCHRel
## [1] 80.03
Ryu2019FF=Ryu2019 %>%filter(pitch_type=="FF")
RyumeanFFSpin=round(mean(Ryu2019FF$release_spin_rate),2)
RyumeanFFRel=round(mean(Ryu2019FF$release_speed),2)
RyumeanFFSpin
## [1] 2078.06
RyumeanFFRel
## [1] 90.72
Ryu2019FC=Ryu2019 %>%filter(pitch_type=="FC")
RyumeanFCSpin=round(mean(Ryu2019FC$release_spin_rate),2)
RyumeanFCRel=round(mean(Ryu2019FC$release_speed),2)
RyumeanFCSpin
## [1] 2063.77
RyumeanFCRel
## [1] 86.98
Ryu2019FT=Ryu2019 %>%filter(pitch_type=="FT")
RyumeanFTSpin=round(mean(Ryu2019FT$release_spin_rate),2)
RyumeanFTRel=round(mean(Ryu2019FT$release_speed),2)
RyumeanFTSpin
## [1] 2020.65
RyumeanFTRel
## [1] 90.14
Ryu2019CU=Ryu2019 %>%filter(pitch_type=="CU")
RyumeanCUSpin=round(mean(Ryu2019CU$release_spin_rate),2)
RyumeanCURel=round(mean(Ryu2019CU$release_speed),2)
RyumeanCUSpin
## [1] 2574.83
RyumeanCURel
## [1] 72.65
Ryu2019SL=Ryu2019 %>%filter(pitch_type=="SL")
RyumeanSLSpin=round(mean(Ryu2019SL$release_spin_rate),2)
RyumeanSLRel=round(mean(Ryu2019SL$release_speed),2)
RyumeanSLSpin
## [1] 2379
RyumeanSLRel
## [1] 79.83
pitchesRyu=c(unique(Ryu2019$pitch_type))
pitchesRyu
## [1] "CH" "FF" "FC" "FT" "CU" "SL"
spinsRyu=c(RyumeanCHSpin, RyumeanFFSpin,RyumeanFCSpin,RyumeanFTSpin, RyumeanCUSpin, RyumeanSLSpin)
spinsRyu
## [1] 1486.65 2078.06 2063.77 2020.65 2574.83 2379.00
ReleaseSpeedRyu=c(RyumeanCHRel, RyumeanFFRel, RyumeanFCRel, RyumeanFTRel, RyumeanCURel, RyumeanSLRel)
ReleaseSpeedRyu
## [1] 80.03 90.72 86.98 90.14 72.65 79.83
table1Ryu<-data.frame(pitchesRyu,spinsRyu,ReleaseSpeedRyu)
table1Ryu
ggplot(data = table1Ryu, aes(x=pitchesRyu, y=spinsRyu, fill = ReleaseSpeedRyu)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = pitchesRyu, y = spinsRyu, label = spinsRyu), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Pitch Type") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Hyun-Jin Ryu Avg. Spin Rate and Release Speed by Pitch Type (2019)") + 
  coord_cartesian(ylim = c(0, 3200))

  ggsave("Ryu.png")
## Saving 7 x 5 in image
AllPitchers=rbind(Williams, Musgrove, Archer, Brault, Keller, Cole, Strasburg, Wheeler, Bumgarner, Ryu)
AllPitcherNames=c(unique(AllPitchers$player_name))
AllPitcherNames
##  [1] "Trevor Williams"   "Joe Musgrove"      "Chris Archer"     
##  [4] "Steven Brault"     "Mitch Keller"      "Gerrit Cole"      
##  [7] "Stephen Strasburg" "Zack Wheeler"      "Madison Bumgarner"
## [10] "Hyun-Jin Ryu"
AllSliderPitchers=rbind(Williams, Musgrove, Archer, Brault, Keller, Cole, Strasburg, Wheeler, Ryu)
AllSliderPitcherNames=c(unique(AllSliderPitchers$player_name))
AllSliderspins=c(WilliamsmeanSLSpin, MusgrovemeanSLSpin,ArchermeanSLSpin,BraultmeanSLSpin, KellermeanSLSpin, ColemeanSLSpin, StrasburgmeanSLSpin, WheelermeanSLSpin, RyumeanSLSpin)
AllSliderspins
## [1] 2202.30 2494.72 2613.44 2192.17 2661.34 2621.64 2352.00 2386.41 2379.00
AllSliderReleaseSpeed=c(WilliamsmeanSLRel, MusgrovemeanSLRel, ArchermeanSLRel, BraultmeanSLRel, KellermeanSLRel, ColemeanSLRel, StrasburgmeanSLRel, WheelermeanSLRel, RyumeanSLRel)
AllSliderReleaseSpeed
## [1] 83.02 83.21 88.76 81.22 87.66 89.29 88.17 91.16 79.83
tableAllSliders<-data.frame(AllSliderPitcherNames,AllSliderspins,AllSliderReleaseSpeed)
tableAllSliders
ggplot(data = tableAllSliders, aes(x=AllSliderPitcherNames, y=AllSliderspins, fill = AllSliderReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = AllSliderPitcherNames, y = AllSliderspins, label = AllSliderspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 3) +
  xlab("Player Name") + 
  theme(axis.text.x = element_text(angle = 90))+
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pitchers Avg. Spin Rate and Release Speed for Sliders (2019)") + 
  coord_cartesian(ylim = c(0, 3200))+
  geom_abline(slope=0, intercept=2400,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=2500,  col = "red",lty=2)

  ggsave("AllSliders.png")
## Saving 7 x 5 in image
AllFourseamFastballspins=c(WilliamsmeanFFSpin, MusgrovemeanFFSpin,ArchermeanFFSpin,BraultmeanFFSpin, KellermeanFFSpin,ColemeanFFSpin, StrasburgmeanFFSpin, WheelermeanFFSpin, BumgarnermeanFFSpin, RyumeanFFSpin)
AllFourseamFastballspins
##  [1] 2205.29 2418.30 2264.25 2068.36 2472.93 2530.37 2170.16 2340.70 2406.17
## [10] 2078.06
AllFourseamFastballReleaseSpeed=c(WilliamsmeanFFRel, MusgrovemeanFFRel, ArchermeanFFRel, BraultmeanFFRel, KellermeanFFRel, ColemeanFFRel, StrasburgmeanFFRel, WheelermeanFFRel, BumgarnermeanFFRel, RyumeanFFRel)
AllFourseamFastballReleaseSpeed
##  [1] 91.75 92.74 94.09 92.09 95.36 97.15 93.90 96.78 91.38 90.72
tableAllFourseamFastball<-data.frame(AllPitcherNames,AllFourseamFastballspins,AllFourseamFastballReleaseSpeed)
tableAllFourseamFastball
ggplot(data = tableAllFourseamFastball, aes(x=AllPitcherNames, y=AllFourseamFastballspins, fill = AllFourseamFastballReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x =AllPitcherNames, y = AllFourseamFastballspins, label = AllFourseamFastballspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 3) +
  xlab("Player Name") + 
  theme(axis.text.x = element_text(angle = 90))+
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pitchers Avg. Spin Rate and Release Speed for 4-Seam Fastballs (2019)") + 
  coord_cartesian(ylim = c(0, 3200))+
  geom_abline(slope=0, intercept=2250,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=2350,  col = "red",lty=2)

ggsave("AllFourSeam.png")
## Saving 7 x 5 in image
AllCutterPitchers=rbind(Musgrove,Brault, Bumgarner, Ryu)
AllCutterPitcherNames=c(unique(AllCutterPitchers$player_name))

AllCutterspins=c(MusgrovemeanFCSpin,BraultmeanFCSpin, BumgarnermeanFCSpin, RyumeanFCSpin)
AllCutterspins
## [1] 2513.58 2211.08 2490.13 2063.77
AllCutterReleaseSpeed=c(MusgrovemeanFCRel, BraultmeanFCRel, BumgarnermeanFCRel, RyumeanFCRel)
AllCutterReleaseSpeed
## [1] 88.76 83.49 87.27 86.98
tableAllCutter<-data.frame(AllCutterPitcherNames,AllCutterspins,AllCutterReleaseSpeed)
tableAllCutter
ggplot(data = tableAllCutter, aes(x=AllCutterPitcherNames, y=AllCutterspins, fill = AllCutterReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = AllCutterPitcherNames, y = AllCutterspins, label = AllCutterspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Player Name") + 
  theme(axis.text.x = element_text(angle = 90))+
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pitchers Avg. Spin Rate and Release Speed for Cutters (2019)") + 
  coord_cartesian(ylim = c(0, 3200))+
  geom_abline(slope=0, intercept=2350,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=2450,  col = "red",lty=2)

  ggsave("AllCutters.png")
## Saving 7 x 5 in image
AllChangeupspins=c(WilliamsmeanCHSpin, MusgrovemeanCHSpin,ArchermeanCHSpin,BraultmeanCHSpin, KellermeanCHSpin, ColemeanCHSpin, StrasburgmeanCHSpin, WheelermeanCHSpin, BumgarnermeanCHSpin, RyumeanCHSpin)
AllChangeupspins
##  [1] 1819.29 1999.99 1641.94 1582.26 1704.61 1872.55 1678.08 1774.38 1654.44
## [10] 1486.65
AllChangeupReleaseSpeed=c(WilliamsmeanCHRel, MusgrovemeanCHRel, ArchermeanCHRel, BraultmeanCHRel, KellermeanCHRel, ColemeanCHRel,StrasburgmeanCHRel, WheelermeanCHRel, BumgarnermeanCHRel, RyumeanCHRel)
AllChangeupReleaseSpeed
##  [1] 83.66 85.30 87.67 84.26 91.02 88.65 87.77 88.91 84.16 80.03
tableAllChangeup<-data.frame(AllPitcherNames,AllChangeupspins,AllChangeupReleaseSpeed)
tableAllChangeup
ggplot(data = tableAllChangeup, aes(x=AllPitcherNames, y=AllChangeupspins, fill = AllChangeupReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = AllPitcherNames, y = AllChangeupspins, label = AllChangeupspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 3) +
  xlab("Player Name") + 
  theme(axis.text.x = element_text(angle = 90))+
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pitchers Avg. Spin Rate and Release Speed for Changeups (2019)") + 
  coord_cartesian(ylim = c(0, 3200))+
  geom_abline(slope=0, intercept=1700,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=1800,  col = "red",lty=2)

  ggsave("AllChangeups.png")
## Saving 7 x 5 in image
AllCurveballPitchers=rbind(Williams,Musgrove,Archer,Brault,Keller,Strasburg,Wheeler,Bumgarner,Ryu)
AllCurveballPitcherNames=c(unique(AllCurveballPitchers$player_name))
AllCurveballspins=c(WilliamsmeanCUSpin, MusgrovemeanCUSpin,ArchermeanCUSpin,BraultmeanCUSpin, KellermeanCUSpin, StrasburgmeanCUSpin, WheelermeanCUSpin, BumgarnermeanCUSpin, RyumeanCUSpin)
AllCurveballspins
## [1] 2270.18 2573.59 2676.07 2031.48 2769.73 2775.12 2649.76 2646.16 2574.83
AllCurveballReleaseSpeed=c(WilliamsmeanCURel, MusgrovemeanCURel, ArchermeanCURel, BraultmeanCURel, KellermeanCURel, StrasburgmeanCURel, WheelermeanCURel, BumgarnermeanCURel, RyumeanCURel)
AllCurveballReleaseSpeed
## [1] 76.75 82.04 82.41 71.06 81.11 81.23 80.71 78.81 72.65
tableAllCurveball<-data.frame(AllCurveballPitcherNames,AllCurveballspins,AllCurveballReleaseSpeed)
tableAllCurveball
ggplot(data = tableAllCurveball, aes(x=AllCurveballPitcherNames, y=AllCurveballspins, fill = AllCurveballReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = AllCurveballPitcherNames, y = AllCurveballspins, label = AllCurveballspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 3) +
  xlab("Player Name") + 
  theme(axis.text.x = element_text(angle = 90))+
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pitchers Avg. Spin Rate and Release Speed for Curveballs (2019)") + 
  coord_cartesian(ylim = c(0, 3200))+
  geom_abline(slope=0, intercept=2500,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=2600,  col = "red",lty=2)

  ggsave("AllCurveballs.png")
## Saving 7 x 5 in image
AllTwoSeamPitchers=rbind(Archer,Brault, Cole, Strasburg, Wheeler,Bumgarner, Ryu)
AllTwoSeamPitcherNames=c(unique(AllTwoSeamPitchers$player_name))


AllTwoseamFastballspins=c(ArchermeanFTSpin,BraultmeanFTSpin,ColemeanFTSpin,StrasburgmeanFTSpin,WheelermeanFTSpin, BumgarnermeanFTSpin, RyumeanFTSpin)
AllTwoseamFastballspins
## [1] 2237.17 1888.13 2506.44 2132.50 2254.18 2399.67 2020.65
AllTwoseamFastballReleaseSpeed=c(ArchermeanFTRel, BraultmeanFTRel, ColemeanFTRel, StrasburgmeanFTRel, WheelermeanFTRel, BumgarnermeanFTRel, RyumeanFTRel)
AllTwoseamFastballReleaseSpeed
## [1] 93.85 91.34 97.09 93.75 96.50 92.17 90.14
tableAllTwoseamFastball<-data.frame(AllTwoSeamPitcherNames,AllTwoseamFastballspins,AllTwoseamFastballReleaseSpeed)
tableAllTwoseamFastball
ggplot(data = tableAllTwoseamFastball, aes(x=AllTwoSeamPitcherNames, y=AllTwoseamFastballspins, fill = AllTwoseamFastballReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = AllTwoSeamPitcherNames, y = AllTwoseamFastballspins, label = AllTwoseamFastballspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Player Name") + 
  theme(axis.text.x = element_text(angle = 90))+
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pitchers Avg. Spin Rate and Release Speed for 2-Seam Fastballs (2019)") + 
  coord_cartesian(ylim = c(0, 3200))+
  geom_abline(slope=0, intercept=2150,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=2200,  col = "red",lty=2)

  ggsave("AllTwoSeam.png")
## Saving 7 x 5 in image
SinkerPitchers=rbind(Williams, Musgrove)
PiratesSinkerPitchers=c(unique(SinkerPitchers$player_name))

AllSinkerspins=c(WilliamsmeanSISpin,MusgrovemeanSISpin)
AllSinkerspins
## [1] 1939.53 2276.55
AllSinkerReleaseSpeed=c(WilliamsmeanSIRel, MusgrovemeanSIRel)
AllSinkerReleaseSpeed
## [1] 89.64 91.48
tableAllSinker<-data.frame(PiratesSinkerPitchers,Sinkerspins,SinkerReleaseSpeed)
tableAllSinker
ggplot(data = tableAllSinker, aes(x=PiratesSinkerPitchers, y=AllSinkerspins, fill = AllSinkerReleaseSpeed)) + 
  geom_bar(stat = "identity") + 
  geom_label(aes(x = PiratesSinkerPitchers,y = AllSinkerspins, label = AllSinkerspins), hjust = .5,  vjust = 0, colour = "black", fill = NA, label.size = NA, family="Helvetica", size = 4) +
  xlab("Player Name") + 
  ylab("Spin Rate (RPM)") + 
  ggtitle("Pitchers Avg. Spin Rate and Release Speed for Sinkers (2019)") + 
  coord_cartesian(ylim = c(0, 3200))+
  geom_abline(slope=0, intercept=2100,  col = "red",lty=2)+
  geom_abline(slope=0, intercept=2150,  col = "red",lty=2)

  ggsave("AllSinkers.png")
## Saving 7 x 5 in image